<?php
class Arm_Cron_Sql_Pdo_Mysql extends Arm_Db_Sql_Mysql
{
    /**
     * Таблица с cron заданиями
     * @var string
     */
    const ADMIN_CRON = 'admin_cron';
    
    /**
     * Arm_Translate_Sql_Mysql
     * 
     * @var  Arm_Translate_Sql_Pdo_Mysql
     */
    protected $_sqlTranslate=null;
    
    public function init()
    {
        $this->_sqlTranslate = Arm_Db::getSqlObject('Arm_Translate_Sql');
    }
    
    /**
     * Вернет все процесы
     * 
     * @return array|Zend_Db_Select
     */
    public function getComands($idModule=null, $returnSelect = false)
    {
        $select = $this->_getSelect();
        $select->from(self::ADMIN_CRON);
        if ($idModule !== null) {
            $select->where('id_module=?', $idModule);
        }
        $select = $this->_sqlTranslate->getSelectTranslate(self::ADMIN_CRON, 'id', $select);
        $select->order('last_run  ASC');
        if($returnSelect) {
            return $select;
        }
        return $this->getDb()->fetchAll($select);
    }
    
    /**
     * Вернет данные про одну команду
     * @param int $idComand
     * @return array
     */
    public function getComand($idComand)
    {
        $select = $this->_getSelect();
        $select->from(self::ADMIN_CRON);
        $select->where('id=?', $idComand);
        $select = $this->_sqlTranslate->getSelectTranslate(self::ADMIN_CRON, 'id', $select);
        return $this->getDb()->fetchRow($select);
    }
    
    /**
     * Запись команды в систему
     * @param int $idModule
     * @param string $cmd
     * @param int $period секунды
     * @param описание $description
     */
    public function addComand($idModule, $cmd, $period, $description)
    {
        $this->getDb()->insert(self::ADMIN_CRON, array(
                                                            'on'=>1, 
                                                            'id_module'=>$idModule, 
                                                            'period'=>$period, 
                                                            'cmd'=>$cmd));
        $id = $this->getDb()->lastInsertId(self::ADMIN_CRON);
        $this->_sqlTranslate->insertTranslate(self::ADMIN_CRON, $id, array('description'=>$description));
        return $id;
    }
    
    /**
     * Обновления данных команды
     * @param int $idComand
     * @param array $data
     */
    public function updateComand($idComand, $data)
    {
        $dataCron = $this->_getArrayColumTable(self::ADMIN_CRON, $data);
        if($dataCron !== array()) {
           $this->getDb()->update(self::ADMIN_CRON, $dataCron, $this->_db->quoteInto('id=?', $idComand));
        }
        $this->_sqlTranslate->updateTranslate(self::ADMIN_CRON, $idComand, $data);
        return;
    }
    
    /**
     * Удаления команды
     * @param int $idComand
     */
    public function deleteComand($idComand)
    {
        $this->getDb()->delete(self::ADMIN_CRON, $this->_db->quoteInto('id=?', $idComand));
        $this->_sqlTranslate->deleteTranslate(self::ADMIN_CRON, $idComand);
        return;
    }
}